// map reduce filter 传入的都是 回调函数
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(arr.map(function(x){ return x * x; }));  // [1, 4, 9, 16, 25, 36, 49, 64, 81]
console.log(arr.map(String));  // [ '1', '2', '3', '4', '5', '6', '7', '8', '9' ], 将所有 int 转化为 str

console.log(arr.reduce(function(x, y){ return x + y; }));  // reduce 参数是一个 接收两个参数的函数

console.log(arr.sort(function (x, y) {
    if (x < y) return -1;
    if (x > y) return 1;
    return 0;
}));

console.log(arr.filter(function(x){ return x % 2 !== 0; }));  // 去掉偶数, filter 也传入一个接收一个参数的函数
console.log(['a', 'b'].filter(function (element, index, self) {  // filter 可以接收多个元素, 但一般用第一个
    console.log(element);  // 依次打印'A', 'B', 'C'
    console.log(index);    // 依次打印0, 1, 2
    // console.log(self);  // self就是变量arr
    return true;
}));
arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
console.log( arr.filter(function(element, index, self){ return self.indexOf(element) === index; }));
